#ifndef DW_BASE_STRING_UTILS_H
#	define DW_BASE_STRING_UTILS_H

#include <sstream>

template< typename T >
inline bool toString(const T& obj, std::string& str)
{
	std::ostringstream os;

	os << obj;

	str = os.str();

	return os.good();
}

template<>
inline bool toString< bool >(const bool& obj, std::string& str)
{
	str = obj ? "true" : "false";

	return true;
}

template< typename T >
inline bool fromString(const std::string& str, T& obj)
{
	std::istringstream is(str);

	is >> obj;

	return is.good();
}

template<>
inline bool fromString< bool >(const std::string& str, bool& obj)
{
	if (str.compare("true") == 0)
	{
		obj = true;
	}
	else if (str.compare("false") == 0)
	{
		obj = false;
	}
	else
	{
		return false;
	}

	return true;
}

#endif // !DW_BASE_STRING_UTILS_H
